import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Task } from '../../pages/tasklist/task';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';

/*
  Generated class for the HttpDataProvider provider.

  See https://angular.io/guide/dependency-injection for more info on providers
  and Angular DI.
*/
@Injectable()  //一个服务
export class HttpDataProvider {

  private readonly baseUrl: string = 'http://api2.bmob.cn/1';
  private readonly httpOptions : Object = {
    headers : new HttpHeaders( {
      'X-Bmob-Application-Id': '84aca119faecacc0f4c970f038941ad9',
      'X-Bmob-REST-API-Key': '8c03615080a65b11a0f4e45903775884',
       'Content-Type': 'application/json'
    })
  };

  constructor(public http: HttpClient) {
    console.log('获取HTTP数据服务加载');
  }

  /**
   * 获取待办事项列表
   * @returns{ Observable<Task[]>}   待办事项列表数据集合
    */
  getTaskList(): Observable<Task[]>{
    return this.http.get<Task[]>(`${this.baseUrl}/classes/ToDoList`,
    this.httpOptions).map( data => data["results"]);

  }
  /**
   * 获取指定待办事项
   * @param objectId 
   * @returns{ Observable<Task[]>}  待办事项
   */

  getTask( objectId: string): Observable<Task>{
    return this.http.get<Task>(`${this.baseUrl}/classes/ToDoList/${objectId}`,
    this.httpOptions);
  }

  /**
   * 新增待办事项
   * @param task 
   * @returns{ Observable<Task[]>}  响应结果
   */
  addTask(task: Task): Observable<Task>{
    let _task = {title: task.title, status: task.status, description: 
    task.description};
    return this.http.post<Task>(`${this.baseUrl}/classes/ToDoList/`, _task,
    this.httpOptions);
  }

  /**
   * 更新指定待办事项
   * @param Task 
   * @returns{ Observable<Task>}  响应结果
   */

  updateTask(task : Task) :Observable<Task>{
     let _task = {title: task.title, status: task.status, description: 
     task.description};
    return this.http.put<Task>(`${this.baseUrl}/classes/ToDoList/$ 
    {task.objectId}`, _task, this.httpOptions);
  }

  /**
   * 删除指定待办事项
   * @param task 
   * @returns{ Observable<Task>}  响应结果
   */

  deleteTask(task : Task) :Observable<{}>{
    return this.http.delete(`${this.baseUrl}/classes/ToDoList/${task.objectId}`,
    this.httpOptions);

}
}

